﻿/*!
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using System.Collections.Generic;

namespace Pittypat.Web
{
    /// <summary>
    /// 表示一个已经上传的文件。
    /// </summary>
    sealed class UploadFile
    {
        private string virtualPath;
        private string physicalPath;
        private string name;
        private string originalName;
        private string extension;
        private long size;
        private string type;

        /// <summary>
        /// 使用文件的虚拟路径、物理路径、文件名称、文件的原始名称、文件的扩展名称、文件大小、文件的 MIME 类型初始化 <see cref="UploadFile"/> 类的新实例。
        /// </summary>
        /// <param name="virtualPath">文件虚拟路径。</param>
        /// <param name="physicalPath">文件在服务器上的物理路径。</param>
        /// <param name="name">文件在服务器上名称。</param>
        /// <param name="originalName">文件的原始名称。</param>
        /// <param name="extension">文件的扩展名称。</param>
        /// <param name="size">文件的大小。</param>
        /// <param name="type">文件的 MIME 类型。</param>
        internal UploadFile(string virtualPath, string physicalPath, string name, string originalName, string extension, long size, string type)
        {
            this.virtualPath = virtualPath ?? "";
            this.physicalPath = physicalPath ?? "";
            this.name = name ?? "";
            this.originalName = originalName ?? "";
            this.extension = extension ?? "";
            this.type = type ?? "";
            this.size = size < 0L ? 0L : size;
        }

        /// <summary>
        /// 获取文件的虚拟路径。
        /// </summary>
        internal string VirtualPath
        {
            get
            {
                return this.virtualPath;
            }
        }

        /// <summary>
        /// 获取文件在服务器上的物理路径。
        /// </summary>
        internal string PhysicalPath
        {
            get
            {
                return this.physicalPath;
            }
        }

        /// <summary>
        /// 获取文件在服务器上的名称。
        /// </summary>
        internal string Name
        {
            get
            {
                return this.name;
            }
        }

        /// <summary>
        /// 获取上传文件的原始名称。
        /// </summary>
        internal string OriginalName
        {
            get
            {
                return this.originalName;
            }
        }

        /// <summary>
        /// 获取文件的扩展名称。
        /// </summary>
        internal string Extension
        {
            get
            {
                return this.extension;
            }
        }

        /// <summary>
        /// 获取文件的 MIME 类型。
        /// </summary>
        internal string Type
        {
            get
            {
                return this.type;
            }
        }

        /// <summary>
        /// 获取文件的大小，单位：字节。
        /// </summary>
        internal long Size
        {
            get
            {
                return this.size;
            }
        }

        /// <summary>
        /// 从服务器上删除文件。忽略删除过程中产生的错误。
        /// </summary>
        internal void Delete()
        {
            if (!string.IsNullOrEmpty(this.physicalPath))
            {
                try
                {
                    System.IO.File.Delete(this.physicalPath);
                }
                catch
                {
                }

                this.physicalPath = "";
            }
        }
        
        /// <summary>
        /// 从服务器上删除一组已经上传的文件。
        /// </summary>
        /// <param name="files"></param>
        internal static void Delete(IList<UploadFile> files)
        {
            if (files != null && files.Count > 0)
            {
                foreach (var item in files)
                {
                    item.Delete();
                }
            }
        }
    }
}
